/**
 * @file Layer.hpp
 *
 * @date 19/12/2011
 * @author Tales 
 *
 */

#ifndef LAYER_HPP_
#define LAYER_HPP_

#include <string>
#include <SDL.h>

namespace yep
{
using namespace std;

/**
 * @brief Uma camada.
 *
 * Armazena uma superfície (que considera como própria, para evitar que seja apagada, incremente o refcount)
 */
class Layer
{
public:
	/**
	 * @brief Construtor
	 */
	Layer();

	/**
	 * @brief Construtor cópia
	 * @throw Error if it can't create a surface
	 * @param other
	 */
	Layer(const Layer &other);

	/**
	 * Atribuição
	 * @param other
	 * @return
	 */
	Layer &operator=(const Layer &other);

	/**
	 * @brief Destrutor
	 */
	~Layer();

//	/**
//	 * @brief Retorna o nome
//	 * @return uma string
//	 */
//	string getName() const;

	/**
	 * @brief Retorna a atual superfíce.
	 * @return um ponteiro para a SDL_Surface (o atributo . A posse continua no próprio layer, portanto não deve ser liberado.
	 */
	SDL_Surface *getSurface() const;

//	/**
//	 * @brief Altera o nome.
//	 * @param name o novo nome
//	 */
//	void setName(string name);

	/**
	 * @brief Libera a superficie anterior e a substitui por outra.
	 * @param surface a nova superfície. Esta classe se considera possuidora desta superfície e se responsabiliza por liberá-la.
	 */
	void setSurface(SDL_Surface *surface);
private:
	SDL_Surface *surface;
//	string name;
};

} /* namespace yep */
#endif /* LAYER_HPP_ */
